package demo.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;


@Configuration
public class DataSourceConfig {

    @Value("${spring.datasource.url}")
    private String jdbcUrl;

    @Value("${spring.datasource.username}")
    private String username;

    @Value("${spring.datasource.password}")
    private String password;

    /**
     * 初始化连接池
     *
     */
    @Bean
    public HikariDataSource opsAlertDs() {
        // 1. 创建 HikariConfig 并配置
        HikariConfig config = new HikariConfig();
        config.setPoolName("hikari-ds");
        config.setDriverClassName("com.mysql.cj.jdbc.Driver");
        config.setJdbcUrl(jdbcUrl);
        config.setUsername(username);
        config.setPassword(password);

        // 2. 设置连接池参数
        // 最大连接数
        config.setMaximumPoolSize(10);
        // 最小空闲连接数
        config.setMinimumIdle(5);
        // 连接超时时间（毫秒）
        config.setConnectionTimeout(30000);
        // 空闲连接超时时间（毫秒）
        config.setIdleTimeout(600_000);
        // 连接最大生命周期（毫秒）
        config.setMaxLifetime(1800_000);


        config.setConnectionTestQuery("SELECT 1");
        config.setAutoCommit(true);

        return new HikariDataSource(config);

    }

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSourceProperties dsProperties() {
        return new DataSourceProperties();
    }

    @Bean
    @ConfigurationProperties("spring.datasource.configuration")
    public HikariDataSource ds1() {
        return dsProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build();
    }
}
